// 测试

#include <iostream>
// 创建共享内存的头文件
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    // 创建共享内存
    // shmget(key_t key , size_t size , int shmflg)

    // 构建 Key
    //注意 :  "." . 是一个硬链接 , 指向一个文件 , 所以本质是文件路径 
    key_t key = ftok("." , 0x112233);
    //返回值 : 成功返回 key , 否则返回 -1 并设置错误码
    if(key > 0)
        std::cout << "ftok success , ftok = " << key << std::endl; 
   
    int shmid = shmget(key , 1024 , IPC_CREAT);
    //返回值 :  成功返回合法的标识符 , 失败返回 -1 并设置错误码
    // 这个返回值是给我们用户用的 , 我们访问共享内存都用这个标识符
    if(shmid > 0)
    {
        std::cout << "shmget success , shmget = " << shmid << std::endl; 
    }


    //添加代码 : 映射共享内存
    auto shm_addrr = shmat(shmid , nullptr , 0);
    int id = getpid();
    if(shm_addrr)
        std::cout << "shmat [ " << shmid << " ] to " << id << " success !" << std::endl;

    return 0;
}